package org.wdcode.base.helper;

import org.wdcode.base.bean.EntityBean;
import org.wdcode.common.util.CommonUtil;
import org.wdcode.common.util.ReflectUtil;

/**
 * 继承Entity实体的操作助手类的基础实现
 * @author WD
 * @since JDK6
 * @version 1.0 2009-11-23
 */
public abstract class BaseEntityHelper<E extends EntityBean> implements EntityHelper<E> {
	// 实体
	private E	entity;

	/**
	 * 检查实体对象 为空返回一个空的对象
	 * @param E 实体实体
	 * @return 实体实体
	 */
	public final E check(E E) {
		return CommonUtil.isEmpty(E) ? getInstance() : E;
	}

	/**
	 * 获得一个空的实体对象 此实体只做null的代替,不做赋值操作
	 * @return 实体对象
	 */
	public final synchronized E getInstance() {
		return CommonUtil.isEmpty(entity) ? entity = newInstance() : entity;
	}

	/**
	 * 根据ID构造一个实体
	 * @param id 主键ID
	 * @return 实体
	 */
	public final E newInstance(int id) {
		// 获得实体
		E e = newInstance();
		// 设置实体ID
		e.setId(id);
		// 返回实体
		return e;
	}

	/**
	 * 根据ID构造一个实体
	 * @param id 主键ID
	 * @param name 名称
	 * @return 实体
	 */
	public final E newInstance(int id, String name) {
		// 获得实体
		E e = newInstance(id);
		// 设置实体名称
		e.setName(name);
		// 返回实体
		return e;
	}

	/**
	 * 实例化一个新的实体对象
	 * @return 实体对象
	 */
	public E newInstance() {
		return ReflectUtil.newInstance(getEntityClass());
	}
}
